
/**
 * DESCRIPCION:
 * Servlet post que sirve para subir un archivo al servidor 
 * 
 *MAPEO EN APLICACION: 
 * Para mapearlo en el aplicativo incluir en el archivo de despliegue.
 
	<servlet>
        <servlet-name>ServletSubirArchivo</servlet-name>
        <servlet-class>ec.edu.ups.cidi.siia.plamdep.frontend.utils.ServletSubirArchivo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletSubirArchivo</servlet-name>
        <url-pattern>/upload/*</url-pattern>
    </servlet-mapping>
    
  *DEPENDENCIAS
  	<!-- Dependencia para subir archivos -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
  * TEST: 
   Para invocarlo usar el siguiente codigo html
  
   <form method="POST" enctype="multipart/form-data" action="#{request.contextPath}/upload/subir.html">
   File to upload: <input type="file" name="upfile"/>
 
  		<input type="submit" value="Press"/> 
  </form>
  
  
 *
 */

package ec.edu.ups.cidi.siia.plamdep.frontend.utils;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class ServletSubirArchivo extends HttpServlet {

	String ruta="";//ruta absoluta del archivo
	String path =  "";//ruta de repositorio
	String fileName="";//nombre del archivo que se sube
	protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		ruta="";//ruta absoluta del archivo
		path =  "";//ruta de repositorio
		fileName="";//nombre del archivo que se sube
		  String destino = request.getParameter("destino");
		  System.out.println("Subiendo "+destino);
	
		  if(destino.equalsIgnoreCase("analisis"))
		  { path=  System.getProperty("plamdep.resources.path")+"/documentos_repositorio";
		  	fileName= UUID.randomUUID().toString()+"_";
		  	getNSaveFile(request);
            request.getSession().putValue("ruta_archivo",ruta);
            response.sendRedirect(request.getContextPath() + "/analisis-nuevo.jsf");//envia a la pagina de inicio si no esta autorizado

		  }
		  
		  else  if(destino.equalsIgnoreCase("algoritmo"))
		  {  path=  System.getProperty("plamdep.resources.path")+"/algoritmos_repositorio";
		     getNSaveFile(request);
		     request.getSession().putValue("ruta_jar",ruta);
	            response.sendRedirect(request.getContextPath() + "/algoritmo-nuevo.jsf");//envia a la pagina de inicio si no esta autorizado
		  }
		  else  if(destino.equalsIgnoreCase("fuente"))
		  { path=  System.getProperty("plamdep.resources.path")+"/documentos_repositorio";
		  	fileName= UUID.randomUUID().toString()+"_";
		  	getNSaveFile(request);
          request.getSession().putValue("ruta_fuente",ruta);
          response.sendRedirect(request.getContextPath() + "/analisis-nuevo.jsf");//envia a la pagina de inicio si no esta autorizado

		  }
		  
		  
	}


	public boolean getNSaveFile(HttpServletRequest request) {
	try {
		// Chequea que sea un request multipart (que se este enviando un file)
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		System.out.println("Is multipart=" + isMultipart);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// maxima talla que sera guardada en memoria
		factory.setSizeThreshold(4096000);
		// si se excede de la anterior talla, se ira guardando temporalmente, en la sgte direccion
		factory.setRepository(new File("d:/"));
		ServletFileUpload upload = new ServletFileUpload(factory);
		//maxima talla permisible (si se excede salta al catch)
		upload.setSizeMax(10000000);
		List fileItems = upload.parseRequest(request);
		//obtiene el file enviado
		Iterator i = fileItems.iterator();
		FileItem fi = (FileItem) i.next();
		//graba el file enviado en el servidor local
		//path y Nombre del archivo destino (en el server)
		 fileName =fileName+fi.getName();
		ruta=path +"/"+fileName; 
		
		fi.write(new File(path, fileName));


	} catch (Exception e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
		return false;
	}
	return true;
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}


	}